home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Technotools
/
Technotools (Chestnut CD-ROM)(1993).ISO
/
lang_bas
/
qbscrgen
/
sgdemo.bas
next >
Wrap
BASIC Source File
|
1987-07-24
|
26KB
|
919 lines
rem $linesize:132
rem $title:'* Screen I/O Generator *'
rem $subtitle:'* Introduction *'
rem $include:'aecommon.bas'
'
' SGDEMO
'
' (c) Roy Barrow, 1986,1987.
'
dim fl$(255%),dl.2$(4%) ' File array, 2nd Key Select Array
dim text$(24%),datfrm$(3%) ' Lines 2-24
dim ip.frame%(24%,80%) ' Frame for input markers
dim var.type$(6%) ' Variable types
dim io.name$(100%) ' 100 Names for Input Definition
dim io.x%(100%) ' 100 X Locations
dim io.y%(100%) ' 100 Y Locations
dim mrec%(100%) ' 100 Master Pointers
dim basgen$(100%) ' Basic Generation Sequence Array
def fnn$(a%)=mid$(str$(a%),2%) ' Commonly used STRIPPER
data "Single String","Text Block","Date"
data "Integer","Single Precision","Double Precision"
data "mm/dd/yy","yy/mm/dd","dd/mm/yy"
for j%=1% to 6%
read var.type$(j%)
next j%
for j%=1% to 3%
read datfrm$(j%)
next j%
call color.init("appcolor.ctl")
menu1:
data 6,"File","Edit","Draw","Input","Exit","Color Setup"
data 7,"Load","Save","Merge","","Generate Basic","","Status"
data 9,"Copy of above line","Center Line","Insert Blank Line","Delete Line","Insert Column","Delete Column","Find & Replace","","Clear"
data 3,"Box","Vertical Line","Horizontal Line"
data 4,"Definition","","Remove","Clear"
data 3,"To Editor (ESC)","To Shell","To System"
data 1,"Define Attributes"
restore menu1
gosub get.menu
'
' The menu definition is now made. Now call the Introductory box
'
locate ,,0
call qbtools.frame
w$=input$(1%)
cls
ae.sstack%=2000%
call Centre.Text("Screen Generator Version: SGDEMO v 1.02",1%)
call startup
for j%=1% to 24%
text$(j%)=string$(80%,32%)
for k%=1% to 80%
ip.frame%(j%,k%)=0%
next k%
next j%
for j%=1% to 100%
io.name$(j%)=""
io.x%(j%)=0%
io.y%(j%)=0%
mrec%(j%)=0%
next j%
call scroll(1,2,80,24,0)
ins$="Off"
x%=1%
y%=2%
xmin%=1%
xmax%=80%
ymin%=2%
ymax%=24%
cycle%=0%
lsch%=32% ' Last special alternate character
dr.only%=0% ' Currently in NODRAW mode
while cycle%=0%
if ip.frame%(y%,x%) then
i.o.txt$="F5=I/O "
i.o.set%=1%
else
i.o.txt$=" "
i.o.set%=0%
end if
if dr.only%=1% then
i.o.txt$="Draw:"
if vl.draw%=1% then
i.o.txt$=i.o.txt$+"Vl"
end if
if hz.draw%=1% then
i.o.txt$=i.o.txt$+"Hl"
end if
if bx.draw%=1% then
i.o.txt$=i.o.txt$+"Box"
end if
end if
optex$="F1=Menu F2=Last Menu F3=Alt Ch F4=Last Alt Ch Ins="+ins$+" x="+fnn$(x%)+" y="+fnn$(y%)+" "+i.o.txt$
call qprint(optex$,25,1)
locate y%,x%,1%,0%,15% ' Display the cursor
call Get.Single(ch%,ctype%)
if dr.only%=0% then
if ctype%=2% then
if ch%=61% then
for j%=1% to 70%
fl$(j%)=chr$(j%+173%)
next j%
dialog$(1)="Select a"
dialog$(2)="Character"
dialog$(3)="From List"
dialog$(4)=""
call select.box(fl$(),8%,70%,1%,opt$)
ch%=asc(opt$)
lsch%=ch%
ctype%=1%
end if
end if
if ctype%=2% then ' Repeat last Alternate Character
if ch%=62% then
ch%=lsch%
ctype%=1%
end if
end if
if ctype%=2% then
if ch%=63% then ' Display i.o.definition
if i.o.set% then
nav%=ip.frame%(y%,x%)
rec%=mrec%(nav%)
get #11,rec%
vt%=asc(v.type$)
varn$=var.des$
call ctrl.trim(varn$)
dialog$(1%)="Variable: "+varn$+" ("+var.type$(vt%)+")"
if vt%=1% then
dialog$(2%)=str$(asc(s.len$))+" characters in length."
end if
if vt%=2% then
dialog$(2%)=str$(asc(b.width$))+" characters wide, and"+str$(asc(b.height$))+" lines high."
end if
if vt%=3% then
dialog$(2%)="Which is in the format:"
df%=asc(d.form$)
dialog$(2%)=dialog$(2%)+datfrm$(df%)+"."
end if
if (vt%=4% or vt%=6% or vt%=5%) then
dialog$(2%)="In value between"
dialog$(2%)=dialog$(2%)+str$(cvd(v.min$))+" and"+str$(cvd(v.max$))+"."
end if
dc%=2%
call Press.Any.Key(dc%)
end if
end if
end if
if ctype%=2% then
if ch%=59% or ch%=60% then
if ch%=59% then
where%=varptr(ae.screens%(1%))
locate ,,0
restore menu1
gosub get.menu
call Pull.Down.Menu
prvmen%=menu%
prvop%=menop%
end if
if ch%=60% then
menu%=prvmen%
menop%=prvop%
end if
if menu%=1% then
rem $subtitle:'Load an existing file.'
rem $page
if menop%=1% then ' Load a file
call getfiles(fl$(),"?","scr",count%)
if count%>0% then
call qsort(fl$(),count%)
dialog$(1)="Select file to load"
dialog$(2)="from the list on the"
dialog$(3)="left."
dialog$(4)=""
call select.box(fl$(),10%,count%,12%,opt$)
call ctrl.trim(opt$)
if len(opt$) then
open "r",1,opt$,80
opt$=left$(opt$,instr(opt$,".")-1%)
field #1,80 as s1$
for j%=1% to 24%
get #1,j%
text$(j%)=s1$
next j%
close 1
for j%=2% to 24%
call qprint(text$(j%),j%,1%)
next j%
end if
end if
if count%=0% then ' No file exists.
end if
end if
rem $subtitle:'Save a file.'
rem $page
if menop%=2% then ' Save a file
dialog$(1)="Save this file as ..."
dialog$(2)=""
fil.1$=string$(8%,32%)
l1%=8%
call Dialog(fil.1$,l1%)
call ctrl.trim(fil.1$)
if len(fil.1$) then
open "r",1,fil.1$+".SCR",80
field #1,80 as s1$
for j%=1% to 24%
lset s1$=text$(j%)
put #1,j%
next j%
close 1
end if
end if
rem $subtitle:'Merge a file.'
rem $page
if menop%=3% then ' Merge a file
call getfiles(fl$(),"?","scr",count%)
if count% then
call qsort(fl$(),count%)
end if
if count% then
dialog$(1)="Select file to merge from"
dialog$(2)="the list on the left. This"
dialog$(3)="option merges in screen"
dialog$(4)="text only. I/O is ignored."
call select.box(fl$(),10%,count%,12%,opt$)
call ctrl.trim(opt$)
if len(opt$) then
open "r",1,opt$,80
opt$=left$(opt$,instr(opt$,".")-1%)
field #1,80 as s1$
for j%=2% to 24%
get #1,j%
for k%=1% to 80%
if mid$(text$(j%),k%,1%)=" " then
mid$(text$(j%),k%,1%)=mid$(s1$,k%,1%)
end if
next k%
next j%
close 1
for j%=2% to 24%
call qprint(text$(j%),j%,1%)
next j%
end if
end if
end if
rem $subtitle:'Generate the BASIC code.'
rem $page
if menop%=5% then ' Generate Basic
dialog$(1)="BASIC program to create is ..."
dialog$(2)=""
fil.1$=string$(8%,32%)
l1%=8%
call Dialog(fil.1$,l1%)
call ctrl.trim(fil.1$)
open "o",1,fil.1$+".bas"
dialog$(1%)="Title this program ..."
dialog$(2%)=""
call Dialog(tit$,50%)
call ctrl.trim(tit$)
print #1,"rem $linesize:132"
print #1,"rem $title:'"+tit$+"'"
print #1,"rem $subtitle:'(c) Copyright Roy Barrow 1986,1987.'"
print #1,""
print #1,"' Screen Generator Version: SGDEMO"
print #1,"' This program ("+fil.1$+") created on: "+date$+", "+time$
print #1,""
print #1," call "+fil.1$+".frame"
print #1,""
print #1," END"
print #1,""
print #1," sub "+fil.1$+".frame static"
for j%=2% to 24%
w$=text$(j%)
call trim(w$)
if len(w$) then
w%=instr(text$(j%),w$)
print #1," locate "+fnn$(j%)+","+fnn$(w%)
print #1," print "+chr$(34%)+w$+chr$(34%)+";"
end if
next j%
print #1," end sub ' "+fil.1$
close 1
end if
rem $subtitle:'Status / free memory.'
rem $page
if menop%=7% then ' Show status
dialog$(1%)="Free memory (before compaction) is"+str$(fre(0))
dialog$(2%)="Free memory (after compaction) is"+str$(fre(""))
dialog$(3%)="Size of next free LNA is"+str$(fre(-1))
call Press.Any.Key(3%)
end if
end if
if menu%=2% then
rem $subtitle:'Copy above line'
rem $page
if menop%=1% then ' Copy above line
text$(y%)=text$(y%-1%)
call qprint(text$(y%),y%,1%)
y%=y%+1%
end if
rem $subtitle:'Center the current line.'
rem $page
if menop%=2% then ' Centre line
call trim(text$(y%))
text$(y%)=string$((80%-len(text$(y%)))/2%,32%)+text$(y%)
text$(y%)=text$(y%)+string$(80%-len(text$(y%)),32%)
call qprint(text$(y%),y%,1%)
end if
rem $subtitle:'Insert a blank line.'
rem $page
if menop%=3% then ' Insert line
for j%=24% to y%+1% step -1%
text$(j%)=text$(j%-1%)
next j%
text$(y%)=string$(80%,32%)
for j%=24% to y% step -1%
call qprint(text$(j%),j%,1%)
next j%
end if
rem $subtitle:'Delete current line and scroll others up'
rem $page
if menop%=4% then ' Delete line
for j%=y% to 23%
text$(j%)=text$(j%+1%)
next j%
text$(24%)=string$(80%,32%)
for j%=y% to 24%
call qprint(text$(j%),j%,1%)
next j%
end if
rem $subtitle:'Insert a column of blanks at this point'
rem $page
if menop%=5% then ' Insert column
ch%=32% ' Character to insert
for j%=2% to 24%
if x%=1% then
text$(j%)=chr$(ch%)+mid$(text$(j%),1%,79%)
end if
if x%=80% then
mid$(text$(j%),80%,1%)=chr$(ch%)
end if
if (x%>1% and x%<80%) then
pref$=mid$(text$(j%),1%,x%-1%)
post$=mid$(text$(j%),x%,79%)
text$(j%)=pref$+chr$(ch%)+post$
end if
if len(text$(j%))>80% then
text$(j%)=mid$(text$(j%),1%,80%)
end if
call qprint(text$(j%),j%,1%)
next j%
end if
rem $subtitle:'Delete a column at this point'
rem $page
if menop%=6% then ' Delete column
for j%=2% to 24%
if x%=1% then
text$(j%)=mid$(text$(j%),2%,80%)+" "
end if
if x%=80% then
mid$(text$(j%),80%,1%)=" "
end if
if (x%>1% and x%<80%) then
pref$=mid$(text$(j%),1%,x%-1)
post$=mid$(text$(j%),x%+1,79%)
text$(j%)=pref$+post$+" "
end if
call qprint(text$(j%),j%,1%)
next j%
end if
rem $subtitle:'Find and replace text on whole screen'
rem $page
if menop%=7% then ' Find & Replace
dialog$(1)="Find..."
dialog$(2)="and replace it with..."
dialog$(3)="(If items differ in length, the"
dialog$(4)="line will loose characters)"
find$=string$(8%,32%)
rep$=string$(8%,32%)
l1%=8%
l2%=8%
call Dialog.Two(find$,l1%,rep$,l2%)
call ctrl.trim(find$)
call ctrl.trim(rep$)
a%=len(find$)
b%=len(rep$)
if a%>b% then
b%=a%
end if
if len(find$)<b% then
find$=find$+string$(b%-len(find$),32%)
end if
if len(rep$)<b% then
rep$=rep$+string$(b%-len(rep$),32%)
end if
for j%=2% to 24%
a%=instr(text$(j%),find$)
c%=0%
while a% and c%<80%
mid$(text$(j%),a%,b%)=rep$
c%=c%+1%
a%=instr(text$(j%),find$)
wend
call qprint(text$(j%),j%,1%)
next j%
end if
rem $subtitle:'Clear (blank) the whole screen'
rem $page
if menop%=9% then ' CLEAR
for j%=2% to 24%
text$(j%)=string$(80%,32%)
call qprint(text$(j%),j%,1%)
next j%
end if
end if
if menu%=3% then
rem $subtitle:'Draw a box'
rem $page
if menop%=1% then ' Draw a BOX
dialog$(1)="To draw a box, move to the opposite"
dialog$(2)="corner & press return - still continue?"
call yes.no(yn$)
if yn$="Y" then ' Yes, a box has been chosen
bx.draw%=1% ' Turn on box draw
dr.only%=1% ' Make allowable input draw only
crx%=x%
cry%=y%
end if
end if
rem $subtitle:'Draw a vertical line'
rem $page
if menop%=2% then ' Draw a Vertical line
dialog$(1)="To draw a line, move to the opposite"
dialog$(2)="end & press return - still continue?"
call yes.no(yn$)
if yn$="Y" then ' Yes, a vertical line has been chosen
vl.draw%=1% ' Turn on line draw
dr.only%=1% ' Make allowable input draw only
crx%=x%
cry%=y%
end if
end if
rem $subtitle:'Draw a horizontal line'
rem $page
if menop%=3% then ' Draw a horizontal line
dialog$(1)="To draw a line, move to the opposite"
dialog$(2)="end & press return - still continue?"
call yes.no(yn$)
if yn$="Y" then ' Yes, a horizontal line been chosen
hz.draw%=1% ' Turn on line draw
dr.only%=1% ' Make allowable input draw only
crx%=x%
cry%=y%
end if
end if
end if
if menu%=4% then
rem $subtitle:'Define an input'
rem $page
dialog$(1%)="This option is not available in"
dialog$(2%)="the demo version of the screen"
dialog$(3%)="generator. This is a function"
dialog$(4%)="available ONLY in the Application"
dialog$(5%)="Engineer Program Generator...."
call Press.Any.Key(5%)
end if
if menu%=6% then
where%=varptr(ae.screens%(1%))
call scrsave(where%)
cls
call aecolins
close
call scrrest(where%)
menop%=0%
menu%=0%
end if
if menu%=5% then
rem $subtitle:'SHELL - return to DOS (Temporarily)'
rem $page
if menop%=2% then ' SHELL
where%=varptr(ae.screens%(1%))
call scrsave(where%)
cls
print "Use EXIT to return to SGDEMO"
shell "\COMMAND" ' Call the command processor
call scrrest(where%)
end if
rem $subtitle:'Return to DOS'
rem $page
if menop%=3% then ' System
dialog$(1)="Ensure that you have SAVE'd your screen"
dialog$(2)="Do you still want to EXIT SGDEMO ?"
call Yes.No(yn$)
if yn$="Y" then
cls
print "SGDEMO returning to DOS"
system
end if
end if
end if
end if
end if
end if
if ctype%=2% then
rem $subtitle:'General Editing Keys including delete'
rem $page
if dr.only%=0% then
if ch%=82% then ' Insert on / off
if ins$="Off" then
ins$="On "
else
ins$="Off"
end if
end if
if ch%=83% then ' Delete
if x%=1% then
text$(y%)=mid$(text$(y%),2%,80%)+" "
end if
if x%=80% then
mid$(text$(y%),80%,1%)=" "
end if
if (x%>1% and x%<80%) then
pref$=mid$(text$(y%),1%,x%-1)
post$=mid$(text$(y%),x%+1,79%)
text$(y%)=pref$+post$+" "
end if
call qprint(text$(y%),y%,1%)
end if
end if
if dr.only%=0% or (hz.draw%=1% or bx.draw%=1%) then
if ch%=75% then ' Left Arrow
x%=x%-1%
end if
if ch%=77% then ' Right Arrow
x%=x%+1%
end if
end if
if dr.only%=0% or (vl.draw%=1% or bx.draw%=1%) then
if ch%=72% then ' Up Arrow
y%=y%-1%
end if
if ch%=80% then ' Down Arrow
y%=y%+1%
end if
end if
end if
if ctype%=1% then
if ch%=13% then
if dr.only%=0% then
x%=1%
y%=y%+1%
end if
if crx%>x% then
stx%=x%
enx%=crx%
else
stx%=crx%
enx%=x%
end if
if cry%>y% then
sty%=y%
eny%=cry%
else
sty%=cry%
eny%=y%
end if
if dr.only%=1% then
if hz.draw%=1% then ' Complete horizontal line
fl$(1%)=string$(5%,196%)
fl$(2%)=string$(5%,205%)
fl$(3%)=string$(5%,"-")
fl$(4%)=string$(5%,"_")
fl$(5%)=string$(5%,"=")
dialog$(1)="Select a line"
dialog$(2)="type from those"
dialog$(3)="available in the"
dialog$(4)="list displayed"
call select.box(fl$(),4%,5%,5%,opt$)
if len(opt$)<>0% then
for hz.draw%=stx% to enx%
mid$(text$(y%),hz.draw%,1%)=chr$(asc(opt$))
next hz.draw%
call qprint(text$(y%),y%,1%)
end if
hz.draw%=0%
end if
if vl.draw%=1% then ' Complete vertical line
fl$(1%)=chr$(179%)
fl$(2%)=chr$(186%)
fl$(3%)="|"
fl$(4%)="!"
dialog$(1)="Select a line"
dialog$(2)="type from those"
dialog$(3)="available in the"
dialog$(4)="list displayed"
call select.box(fl$(),4%,4%,2%,opt$)
if len(opt$)<>0% then
for vl.draw%=sty% to eny%
mid$(text$(vl.draw%),x%,1%)=chr$(asc(opt$))
call qprint(text$(vl.draw%),vl.draw%,1%)
next vl.draw%
end if
vl.draw%=0%
end if
if bx.draw%=1% then ' Complete box
fl$(1%)=chr$(218%)+chr$(196%)+chr$(191%)
fl$(2%)=chr$(213%)+chr$(205%)+chr$(184%)
fl$(3%)=chr$(214%)+chr$(196%)+chr$(183%)
fl$(4%)=chr$(201%)+chr$(205%)+chr$(187%)
dialog$(1)="Select a Box line"
dialog$(2)="type from those"
dialog$(3)="available in the"
dialog$(4)="list displayed"
call select.box(fl$(),4%,4%,3%,opt$)
if len(opt$)<>0% then
box.t%=asc(opt$)
if box.t%=218% then
tl%=218%
tr%=191%
bl%=192%
br%=217%
vt%=179%
hz%=196%
end if
if box.t%=213% then
tl%=213%
tr%=184%
bl%=212%
br%=190%
vt%=179%
hz%=205%
end if
if box.t%=201% then
tl%=201%
tr%=187%
bl%=200%
br%=188%
vt%=186%
hz%=205%
end if
if box.t%=214% then
tl%=214%
tr%=183%
bl%=211%
br%=189%
vt%=186%
hz%=196%
end if
for bx%=stx%+1% to enx%-1%
mid$(text$(sty%),bx%,1%)=chr$(hz%)
mid$(text$(eny%),bx%,1%)=chr$(hz%)
next bx%
for bx%=sty%+1% to eny%-1%
mid$(text$(bx%),stx%,1%)=chr$(vt%)
mid$(text$(bx%),enx%,1%)=chr$(vt%)
next bx%
mid$(text$(sty%),stx%,1%)=chr$(tl%)
mid$(text$(eny%),stx%,1%)=chr$(bl%)
mid$(text$(sty%),enx%,1%)=chr$(tr%)
mid$(text$(eny%),enx%,1%)=chr$(br%)
for bx%=sty% to eny%
call qprint(text$(bx%),bx%,1%)
next bx%
end if
bx.draw%=0%
end if
dr.only%=0%
end if
end if
if dr.only%=0% then
if ch%=8% then
mid$(text$(y%),x%,1%)=chr$(32%)
call qprint(text$(y%),y%,1%)
x%=x%-1%
end if
if ch%=127% then
if x%=1% then
text$(y%)=mid$(text$(y%),2%,80%)+" "
end if
if x%=80% then
mid$(text$(y%),80%,1%)=" "
end if
if (x%>1% and x%<80%) then
pref$=mid$(text$(y%),1%,x%-1)
post$=mid$(text$(y%),x%+1,79%)
text$(y%)=pref$+post$+" "
end if
call qprint(text$(y%),y%,1%)
end if
if ch%=9% then
x%=x%+5%
end if
if (ch%>31% and ch%<127%) or (ch%>173% and ch%<254%) then
if ins$="Off" then
mid$(text$(y%),x%,1%)=chr$(ch%)
end if
if ins$="On " then
if x%=1% then
text$(y%)=chr$(ch%)+mid$(text$(y%),1%,79%)
end if
if x%=80% then
mid$(text$(y%),80%,1%)=chr$(ch%)
end if
if (x%>1% and x%<80%) then
pref$=mid$(text$(y%),1%,x%-1%)
post$=mid$(text$(y%),x%,79%)
text$(y%)=pref$+chr$(ch%)+post$
end if
if len(text$(y%))>80% then
text$(y%)=mid$(text$(y%),1%,80%)
end if
end if
x%=x%+1%
call qprint(text$(y%),y%,1%)
end if
end if
end if
if y%>ymax% then
y%=ymin%
end if
if y%<ymin% then
y%=ymax%
end if
if x%>xmax% then
x%=xmin%
end if
if x%<xmin% then
x%=xmax%
end if
wend
end
rem $subtitle:'Read menu definitions from DATA statements'
rem $page
get.menu:
e.count%=0%
read mcount%
for mop%=1% to mcount%
e.count%=e.count%+1%
read ae.menu$(e.count%)
next mop%
for mop%=1% to mcount%
read sop%
for j%=1% to sop%
e.count%=e.count%+1%
read ae.menu$(e.count%)
next j%
ae.op%(mop%)=sop%
next mop%
return
rem $subtitle:'Startup screen - greetings'
sub startup static
call explode
call SG5greet
call Get.Single(a%,b%)
end sub
sub explode static
tr$="╗"
bl$="╚"
br$="╝"
horz$="═"
vert$="║"
c%=11% ' Center point
b%=25%
for d%=2% to 7%
call qprint("╔",c%-d%,b%)
call qprint(tr$,c%-d%,80%-b%)
call qprint(bl$,c%+d%,b%)
call qprint(br$,c%+d%,80%-b%)
call qprint(string$((39%-b%)*2%+1%,horz$),c%-d%,b%+1%)
call qprint(string$((39%-b%)*2%+1%,horz$),c%+d%,b%+1%)
for j%=(c%-d%)+1% to (c%+d%)-1%
call qprint(vert$,j%,b%)
call qprint(vert$,j%,80%-b%)
next j%
if d%<>7% then
call qprint(" ",c%-d%,b%)
call qprint(" ",c%-d%,80%-b%)
call qprint(" ",c%+d%,b%)
call qprint(" ",c%+d%,80%-b%)
call qprint(string$((39%-b%)*2%+1%,32),c%-d%,b%+1%)
call qprint(string$((39%-b%)*2%+1%,32),c%+d%,b%+1%)
for j%=(c%-d%)+1% to (c%+d%)-1%
call qprint(" ",j%,b%)
call qprint(" ",j%,80%-b%)
next j%
b%=b%-2%
end if
next d%
end sub
sub SG5greet static
call qprint("Screen Generator Utility",9,29)
call qprint("(C) Roy Barrow 1986,1987",10,29)
call qprint("Version SGDEMO",11,34)
call qprint("Press any Key to continue",13,29)
end sub
sub QBTOOLS.frame static
call qprint("╒═══════════════════════════════════════════════════Press any key to continue══╕",2,1)
call qprint("│ │",3,1)
call qprint("│ QuickBASIC Toolbox, by Roy Barrow │",4,1)
call qprint("│ │",5,1)
call qprint("│ The QuickBASIC Toolbox is a collection of sub programs that can be │",6,1)
call qprint("│ included with your QuickBASIC applications. A few of the functions │",7,1)
call qprint("│ of this collection are demonstrated in this program, a simple basic │",8,1)
call qprint("│ screen generator. │",9,1)
call qprint("│ │",10,1)
call qprint("│ Other functions not displayed here include: │",11,1)
call qprint("│ │",12,1)
call qprint("│ Binary Tree File Indexing , Dynamic File Control , │",13,1)
call qprint("│ Text Block, Numeric & Date Input with range validation , │",14,1)
call qprint("│ Context Sensitive Help .... and a host more. │",15,1)
call qprint("│ │",16,1)
call qprint("│ A copy of these routines and source code is available for $30 from: │",17,1)
call qprint("│ │",18,1)
call qprint("│ Roy Barrow BBBS - Wildcat! │",19,1)
call qprint("│ 5g 222 Church Street - or - Basic programmers Bulletin Board System │",20,1)
call qprint("│ Philadelphia (215) 627-3910 24hrs 2400/1200 Baud │",21,1)
call qprint("│ PA 19106 │",22,1)
call qprint("│ (215) 922-2557 ..... Ask about the Application Engineer Program Generator. │",23,1)
call qprint("╘══════════════════════════════════════════════════════════════════════════════╛",24,1)
end sub ' QBTOOLS